%%仅迭代十次在h小于0.8的情况下，对H1+H2进行优化

%% 目标函数定义
function fitness = objective_function(params)
    % 假设参数为 [x1, x2, x3]
    x1 = params(1);
    x2 = params(2);
    
    assignin("base", 'x1', x1);
    assignin("base", 'x2', x2);

    
    filename = 'qiyueqi_R2023a.mdl';
    res = sim(filename);
    o1 = res.ScopeData.signals(1).values;
    o2 = res.ScopeData.signals(2).values;

    H1 = max(o1) - min(o1);
    H2 = max(o2) - min(o2);
    
    % 如果H1, H2, H3 都小于阈值，则进行惩罚，返回更高的适应度
    if H1 < 1.2 && H2 < 1.2
        fitness = H1 + H2 ;  % 总幅度
    else
        fitness = 9999;  % 惩罚值，如果不满足条件
    end
end

%% 粒子群优化
nvars = 2;  % 优化的变量个数
lb = [-1, -1];  % 参数下界
ub = [1, 1];  % 参数上界

% 粒子群优化的参数
options = optimoptions('particleswarm', 'SwarmSize', 30, 'MaxIterations', 50, 'Display', 'iter');

% 执行粒子群优化
[bestParams, bestFitness] = particleswarm(@objective_function, nvars, lb, ub, options);

% 显示结果
fprintf('最优参数：x1 = %.10f, x2 = %.10f\n', bestParams(1), bestParams(2));
fprintf('最优适应度值：%.10f\n', bestFitness);
